package cn.jja8.bukkit.bukkitwindowtool.window;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.List;

/**
 * 一个对按钮显示的简化实现
 * */
public abstract class ButtonItemStack implements Button {
    protected ItemStack itemStack;

    /**
     * @param itemStack 用于显示的按钮
     * */
    public ButtonItemStack(ItemStack itemStack) {
        this.itemStack = itemStack;
    }

    /**
     * @param icon 按钮图标
     * */
    public ButtonItemStack(Material icon) {
        itemStack = new ItemStack(icon);
    }

    /**
     * @param name 按钮名称
     * @param icon 按钮图标
     * */
    public ButtonItemStack(String name, Material icon) {
        itemStack = new ItemStack(icon);
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta!=null){
            itemMeta.setDisplayName(name);
            itemStack.setItemMeta(itemMeta);
        }
    }

    /**
     * @param explain 按钮描述
     * @param name 按钮名称
     * @param icon 按钮图标
     * */
    public ButtonItemStack(String name, List<String> explain, Material icon) {
        itemStack = new ItemStack(icon);
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta!=null){
            itemMeta.setDisplayName(name);
            itemMeta.setLore(explain);
            itemStack.setItemMeta(itemMeta);
        }
    }

    public String getName() {
       ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta==null){
            return null;
        }
        return itemMeta.getDisplayName();
    }

    public void setName(String name) {
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta==null){
            return;
        }
        itemMeta.setDisplayName(name);
        itemStack.setItemMeta(itemMeta);
    }

    public List<String> getExplain() {
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta==null){
            return null;
        }
        return itemMeta.getLore();
    }

    public void setExplain(List<String> explain) {
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta==null){
            return;
        }
        itemMeta.setLore(explain);
        itemStack.setItemMeta(itemMeta);
    }

    public Material getIcon() {
        if (itemStack!=null){
            return itemStack.getType();
        }else  {
            return null;
        }
    }

    public void setIcon(Material icon) {
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemStack = new ItemStack(icon);
        ItemMeta thisI =  itemStack.getItemMeta();
        if (itemMeta!=null&&thisI!=null){
           thisI.setDisplayName(itemMeta.getDisplayName());
           thisI.setLore(itemMeta.getLore());
        }
    }

    @Override
    public ItemStack getItemStack() {
        return itemStack.clone();
    }
}
